package com.itheima.a01threadpool2;

import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

public class MyThreadPoolDemo1 {
    public static void main(String[] args) {
            /*

     */
        /*
        ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor
        (核心线程数量，最大线程数量，空闲线程最大存活时间，任务队列，创建线程工厂，任务的拒绝策略)
        参数一：核心线程数量      不能小于0
        参数二：最大线程数量      不能小于等于0，最大数量 》=核心线程数量
        参数三：空闲线程最大存活时间  不能小于等于0
        参数四：时间单位        用TimeUnit指定
        参数五：任务队列        不能为null
        参数六：创建线程工厂      不能为null
        参数七：任务的拒绝策略     不能为null

            任务拒绝策略
    ThreadPoolExecutor.AbortPolicy          默认策略：丢弃任务并抛出RejectedExecutionException异常
    ThreadPoolExecutor.DiscardPolicy        丢弃任务，但不招聘异常，这是不推荐的做法
    ThreadPoolExecutor.DiscardOldestPolicy  抛弃队列中等待最久的任务，然后把当前任务加入队列中
    ThreadPoolExecutor.CallerRunsPolicy     调用任务的run()方法绕过线程池直接执行

         */

        ThreadPoolExecutor pool = new ThreadPoolExecutor(
                3,  //核心线程数量，不能小于0
                6,  //最大线程数量，不能小于等于0，最大数量》=核心线程数量
                60, //空闲线程最大存活时间
                TimeUnit.SECONDS,    //时间单位
                new ArrayBlockingQueue<>(3),    //任务队列
                Executors.defaultThreadFactory(),    //创建线程工厂
                new ThreadPoolExecutor.AbortPolicy()//四种拒绝策略
        );
    }
}
